#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<dirent.h>
#include<string.h>
#include<time.h>
#include<errno.h>
int ds18b20_get_temperature(float *temp)
{
    char             w1_path[50] = "/sys/bus/w1/devices/";
    char             chip[20];
    char             buf[128];
    DIR             *dirp;
    struct dirent   *direntp;
    int              fd = -1;
    char            *ptr;
    float            value;
    int              found = 0;

    if(!temp)
    {
        return -1;
    }

    if((dirp = opendir(w1_path)) == NULL)/*打开文件夹并返回给dirp*/
    {
        printf("opendir error:%s\n",strerror(errno));
        return -2;
    }

    while((direntp = readdir(dirp)) !=NULL)  /*从文件夹中读取内容并判断是否为空*/
    {
        if(strstr(direntp->d_name,"28-"))  /**/
        {
            strcpy(chip,direntp->d_name);
            found = 1;
        }
    }
    closedir(dirp);/*关闭文件夹*/

    if(!found)
    {
        printf("can not find ds18b20 in %s\n",w1_path);
        return -3;
    }
    strncat(w1_path,chip,sizeof(w1_path)-strlen(w1_path));
    strncat(w1_path,"/w1_slave",sizeof(w1_path)-strlen(w1_path));
    if((fd=open(w1_path,O_RDONLY)) < 0)
    {
        printf("open %s error: %s\n",w1_path,strerror(errno));
        return -4;
    }
    if(read(fd,buf,sizeof(buf)) < 0)
    {
        printf("read %s error: %s\n",w1_path,strerror(errno));
        return -5;
    }

    ptr = strstr(buf,"t=");
    if(!ptr)
    {
        printf("ERROR:Can not get temprature\n");
        return -6;
    }
    ptr+=2;
    *temp = atof(ptr)/1000;/*ASCII值转换为浮点型数值*/
    close(fd);
    return 0;
}
